
void produce_i() {  // 生产者
    P(empty);   // 缓冲区没有空单元，则等待
    P(mutex);   // 互斥访问修改缓冲区
    add product to buffer;
    V(mutex);
    V(full);   // 通知消费者，缓冲区有非空单元
}

void consumer_i() {  // 消费者
    P(mutex_2);  // 控制只有 1 个消费者执行下面的代码段
    for (int i = 0; i < 10; i++) {
        P(full);    // 缓冲区没有非空单元，则等待
        P(mutex);   // 互斥访问修改缓冲区
        get product from buffer;
        V(mutex);
        V(empty);   // 通知生产者，缓冲区有空单元
    }
    V(mutex_2);
}

